package zz.note.satoken.handler;

import cn.dev33.satoken.exception.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import zz.note.satoken.utils.ResultModel;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @Author: ZZ
 * @date 2022/2/15
 */
@ControllerAdvice
@Slf4j
public class GlobalExceptionHandler {

	// 全局异常拦截（拦截项目中的所有异常）
	@ResponseBody
	@ExceptionHandler
	public ResultModel handlerException(Exception e, HttpServletRequest request, HttpServletResponse response)
			throws Exception {

		// 打印堆栈，以供调试
		System.out.println("全局异常---------------");
		e.printStackTrace();

		if (e instanceof NotLoginException) {	// 如果是未登录异常
			log.info("账号登录异常！原因是：{}",e.getMessage());
			return ResultModel.error(ResultModel.ErrorCode.A0200);
		}
		else if(e instanceof NotRoleException) {		// 如果是角色异常
			log.warn("用户权限异常！原因是：{}",e.getMessage());
			return ResultModel.error(ResultModel.ErrorCode.A0301);
		}
		else if(e instanceof NotPermissionException) {	// 如果是权限异常
			log.warn("用户权限异常！原因是：{}",e.getMessage());
			return ResultModel.error(ResultModel.ErrorCode.A0301);
		}
		else if(e instanceof NotSafeException) {	// 如果是二级认证异常
			log.warn("用户权限异常！原因是：{}",e.getMessage());
			return ResultModel.error(ResultModel.ErrorCode.A0301);
		}
		else if(e instanceof NotBasicAuthException) {	// 如果是Basic认证异常
			log.warn("用户权限异常！原因是：{}",e.getMessage());
			return ResultModel.error(ResultModel.ErrorCode.A0301);
		}
		else {	// 普通异常, 输出：500 + 异常信息
			return ResultModel.error(e.getMessage());
		}
	}

//	/**
//	 * 处理未登录异常
//	 * @param e
//	 * @return
//	 */
//	@ExceptionHandler(value = NotLoginException.class)
//	@ResponseBody
//	public ResultModel notLoginExceptionHandler(NotLoginException e){
//		log.info("账号登录异常！原因是：{}",e.getMessage());
//		return ResultModel.error(ResultModel.ErrorCode.A0200);
//	}
//
//	/**
//	 * 处理权限异常
//	 * @param e
//	 * @return
//	 */
//	@ExceptionHandler(value = NotPermissionException.class)
//	@ResponseBody
//	public ResultModel notPermissionExceptionHandler(NotPermissionException e){
//		log.warn("用户权限异常！原因是：{}",e.getMessage());
//		return ResultModel.error(ResultModel.ErrorCode.A0301);
//	}
//
//	/**
//	 * 二级认证异常
//	 * @param e
//	 * @return
//	 */
//	@ExceptionHandler(value = NotSafeException.class)
//	@ResponseBody
//	public ResultModel notPermissionExceptionHandler(NotSafeException e){
//		log.warn(e.getMessage());
//		return ResultModel.error(ResultModel.ErrorCode.A0301);
//	}
//
//	/**
//	 * 处理空指针的异常
//	 * @param e
//	 * @return
//	 */
//	@ExceptionHandler(value =NullPointerException.class)
//	@ResponseBody
//	public ResultModel exceptionHandler(NullPointerException e){
//		log.error("发生空指针异常！原因是:",e.getMessage());
//		return ResultModel.error(e.getMessage());
//	}

}